home *** CD-ROM | disk | FTP | other *** search
-
- IIC-Bus im Archimedes
- ---------------------
-
-
- # Der IIC-Bus (Internal IC-Bus) ist ein serieller Bus, über welchen mehrere
- IC's vernetzt werden können. Sie benötigen nur 3 Leitungen:
- Masse, Data-Clock und Data.
- # Die Clock und Datenleitung sind als Open Collector ausgelegt und dadurch
- Bi-Direktional und vernetzbar.
- # Taktraten für IIC-Bausteine liegen bei 2kHz, typische Bausteine können
- jedoch bis 100kHz getacktet werden.
- # Das Protokoll der Kommunikation besteht aus:
- + Start-Marke
- + Baustein-Adresse
- + Read/Write-Signal
- + Acknowledge vom Slave
- + Word-Adresse im Slave
- + Daten-Worte
- + Stop-Marke
- # 3 verschiedene Protokolle:
- a) WRITE-MODE
- : Start-Marke
- : Baustein-Adresse (Slave address) und Write-Mode (=0)
- : Acknowledge vom Slave
- : Wort-Adresse im angewählten Baustein, nur im Write-Mode möglich !
- : Acknowledge vom Slave
- : Daten zum Slave
- : Acknowledge vom Slave, Slaveinterne Adresse wird automatisch erhöht.
- : weitere Daten mit Acknowledge.....
- : Stop-Marke
-
- .-.--------------.-.-.--------------.-.--------------.-.-.
- |S|Slave address 0|A| Word address |A| Data |A|P|
- '-'--------------'-'-'--------------'-'--------------'-'-'
- \__8 Bit-word__/ \_8 Bit-word_/ \_8 Bit-word_/
- 0=Read, 1=Write " \___Loop of n____/
-
- b) WRITE word address; READ data
- : Start-Marke
- : Baustein-Adresse (Slave address) und Write-Mode (=0)
- : Acknowledge vom Slave
- : Wort-Adresse im angewählten Baustein, nur im Write-Mode möglich !
- : Acknowledge vom Slave
- : Start-Marke
- : Baustein-Adresse (Slave address) und Read-Mode (=1)
- : Acknowledge vom Slave; Slave wird Slave-Transmitter.
- : Daten vom Slave
- : Acknowledge vom Master, Slaveinterne Adresse wird automatisch erhöht.
- : weitere Daten mit Acknowledge.....
- : nach dem letzten Datenbyte schickt Master eine "1" statt Acknowledge.
- : Stop-Marke
-
- .-.--------------.-.-.--------------.-.
- |S|Slave address 0|A| Word address |A|
- '-'--------------'-'-'--------------'-'
- \__8 Bit-word__/ \_8 Bit-word_/
- 0=Read, 1=Write "
-
- .-.--------------.-.-.--------------.-. .--------------.-.-.
- |S|Slave address 1|A| Data |A|.......| Data |1|P|
- '-'--------------'-'-'--------------'-' '--------------'-'-'
- \__8 Bit-word__/ \_8 Bit-word_/
- 0=Read, 1=Write " \___Loop of n____/ .... last Byte......|
-
- c) Direct Read
- : Start-Marke
- : Baustein-Adresse (Slave address) und Read-Mode (=1)
- : Acknowledge vom Slave
- : Daten vom Slave
- : Acknowledge vom Master, Slaveinterne Adresse wird automatisch erhöht.
- : weitere Daten mit Acknowledge.....
- : nach dem letzten Datenbyte schickt Master eine "1" statt Acknowledge.
- : Stop-Marke
-
- .-.--------------.-.-.--------------.-. .--------------.-.-.
- |S|Slave address 1|A| Data |A|.......| Data |1|P|
- '-'--------------'-'-'--------------'-' '--------------'-'-'
- \__8 Bit-word__/ \_8 Bit-word_/
- 0=Read, 1=Write " \___Loop of n____/ .... last Byte......|
-
- # Slave address ist eine Bauteile-Kennung zur Identifizierung eines IC's.
- Sie wird im Bauteil festgelegt.
- Bei einigen Bausteinen kann durch eine Adress-Leitung diese Kennung
- verändert werden.
- # Word address ist eine Bauteilinterne 8 Bit Adresse über welche die
- gewünschte Funktion abgerufen werden kann.
- # Archimedes IC's:
- + PCF8583, RAM, Uhr, Kalender und Alarmgeber. Verwendbar als Eventzähler.
- Slave address: .---.---.---.---.---.---.---.---.
- | 1 | 0 | 1 | 0 | 0 | 0 |A0 |R/W|
- '---'---'---'---'---'---'---'---'
- + PCF8573, Uhr, Kalender und Alarmgeber. Verwendbar als Eventzähler.
- Slave address: .---.---.---.---.---.---.---.---.
- | 1 | 1 | 0 | 1 | 0 |A1 |A0 |R/W|
- '---'---'---'---'---'---'---'---'
-
- # Archimedes Routinen für den Zugriff auf diese Bausteine:
- + Zur Unterstützung des Uhrenbausteins gibt es diverse Funktionen, um die
- Zeit oder den Ram zu lesen und zu schreiben.
- . OS_Word 14,1 -- Uhr lesen, PRM.562
- . OS_Word 15,8 -- Zeit schreiben, PRM.566
- . OS_Word 15,15 -- Datum schreiben, PRM.567
- . OS_Word 15,24 -- Uhr schreiben, PRM.569
- . OS_Byte 161 -- Read CMOS RAM, PRM.787
- . OS_Byte 162 -- Write CMOS RAM, PRM.788
- Mit den Ram-Funktionen ist es nicht möglich alle 256 Adressen zu
- bearbeiten. Die Daten der Uhr (16 Bytes) sind nicht direkt erreichbar.
- + Zur Unterstützung allgemeiner IIC-Bausteine gibt es eine Funktion die
- die Kommunikation problemlos übernimmt.
- . IIC_Control -- bearbeiten von IIC-Devices, PRM.824
- Diese Funktion ist schlecht erklärt und sogar mit einem Druckfehler
- behaftet. Das Read/Write-Signal ist genau umgekehrt.
- Sie übernimmt die komplette Kommunikation.
- Man muß lediglich beachten, daß beim schreiben die erste Date als
- Bauteil-interne Adresse interpretiert wird. Das Stop-Bit wird nie
- gesendet. Anwählen einer bestimmten Adresse ist also möglich durch
- schreiben eines Blockes der Länge 1. Der interne Adresszähler im
- Baustein zählt ja nach jedem Zugriff um eins aufwärts.
- Siehe auch die Protokoll-Diagramme weiter oben.
-
- # Das Mapping der CMOS-Ram-Funktion weicht von der Hardware ab.
- Die Routine "PROCiicMAP" in IICTest stellt eine Adresstabelle auf
- und gibt sie mit der RAM-lese-Funktion aus.
- d.h. Wir beschreiben jedes Byte mit seiner Adresse
-
- Wir lesen mit der normalen CMosRamleseRoutine:
- 0: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
- 10: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
- 20: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
- 30: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
- 40: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
- 50: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
- 60: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
- 70: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
- 80: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
- 90: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
- A0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
- B0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
- C0: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
- D0: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
- E0: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
- F0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 <-- Uhr
-
- Jetzt lesen wir mit der IIC-Block-Routine:
- 0: 0 1 2 3 4 5 6 7 8 9 A B C D E F <-- Uhr
- 10: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
- 20: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
- 30: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
- 40: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
- 50: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
- 60: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
- 70: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
- 80: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
- 90: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
- A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
- B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
- C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
- D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
- E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
- F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
- Der IIC-Block ist das "Original" mit einer linearen Adressierbarkeit
- über 256 Adressen.
-
-